export {}

// 交叉类型 type  &
type Point2D = {
  x: number
  y: number
}

// 使用交叉类型实现接口的继承功能 &
type Point3D = Point2D & {
  z: number
}

let obj: Point3D = {
  x: 1,
  y: 2,
  z: 3
}

// 对比一下type和interface

// 1. type不能重复定义
// type Person = {
//   name: string
// }

// type Person = {
//   age: number
// }

// 2. interface重复定义会合并

interface Person {
  name: string
}

interface Person {
  age: number
}

// 注意: 属性的类型已经定义过的是不可以改变定义类型
// interface Person {
//   name: number
// }

const person: Person = {
  name: '老韩',
  age: 18
}